/**********************************************************************************************//**
*\file utilAPI.h
*\author Daneluzzi F., Pelloux-Prayer J., Battandier P.
*\version 1
*\date janvier 2012
*\brief Biblioth�que de fonctions utiles lors de l'utilisation de la couche API.
*************************************************************************************************************************/

#include "../Util/comAPI.h"

#ifdef SENSOR_PC
    #include "lienSeriePC.h"
#endif

#define NODE_ID_MAX_LENGTH 3

// Return value of waitForTransmitStatusPacket
#define TIMEOUT                    0xFE    // Time out
#define UNEXPECTING_FRAME_RECEIVED 0xFF    // Fail
#define TX_SUCCESS                 0x00    // Success
#define TX_MAC_ACK_FAIL            0x01    // MAC ACK Failure
#define TX_CCA_FAIL                0x02    // CCA Failure
#define TX_INVALID_ENDPOINT        0x15    // Invalid destinationendpoint
#define TX_NET_ACK_FAIL            0x21    // Network ACK Failure
#define TX_NOT_JOIN_NET            0x22    // Not Joined to Network
#define TX_SELF_ADDRESSED          0x23    // Self-addressed
#define TX_UNKNOWN_ADD             0x24    // Address Not Found
#define TX_UNKNOWN_ROUTE           0x25    // Route Not Found

/*********************************************************************************************//**
* \func: recept
*
* \brief
* Cette fonction attend la réception d'une trame API pendant un temps maximum TimeOut. La fonction
* retourne le temps qu'il restait.
*
*PARAMETRES :
* \param [out] fApi : La trame API reçue
* \param [in] TimeOut : le Time maximum d'attente de réception.
**************************************************************************************************/
int recept(int TimeOut);

/*********************************************************************************************//**
* \func: displayAPIFrame
*
* \brief
* Cette fonction permet d'afficher une trame API sur la console.
*
* PARAMETRES :
* \param [in] fApi : La trame API à afficher
**************************************************************************************************/
void displayAPIFrame();

/*********************************************************************************************//**
* \func: parseApi
*
* \brief
* Cette fonction parse la trame API contenue dans le buffer en paramètre et la
* stocke.
*
* PARAMETRES :
* \param [in] fApi : la trame API à complèter.
* \param [in] buff : le buffer qui contient la trame API.
**************************************************************************************************/
void parseApi(unsigned char *buff);

/*********************************************************************************************//**
* \func: stringCompare
* \brief
* Cette fonction compare deux chaines de caractères et retourne 1 si les deux
* sont égales.
* /!\ les deux chaine ne doivent pas être plus grande que 20 caractères et
* doivent être terminées par un \0.
*
* PARAMETRES :
* \param [in] str1 : la 1ère chaine à comparer
* \param [in] str2 : la 2ème chaine à comparer
**************************************************************************************************/
int stringCompare(unsigned char* str1, unsigned char* str2);

/*********************************************************************************************//**
* \func: stringCopy
*
* \brief
* Cette fonction recopie les caract�re de la chaine src vers la chaine dest
*
* PARAMETRES :
* \param [in] src : la chaine source
* \param [out] dest : la chaine destination
**************************************************************************************************/
char stringCopy(unsigned char* src, unsigned char* dest);

/*********************************************************************************************//**
* \func: waitForTransmitStatusPacket
*
* \brief
* (en mode API) Cette fonction attend (bloquante) la réponse du module
* XBee pour savoir l'état de transmission du paquet envoyé
*
* PARAMETRES :
* \param Aucuns
* \return Etat du paquet (envoyé ou non)
************************************************************************************************/
char waitForTransmitStatusPacket(void);
